// 告诉 rollup 他要打包什么
import clear from 'rollup-plugin-clear'
import screeps from 'rollup-plugin-screeps'
import copy from 'rollup-plugin-copy'
import typescript from 'rollup-plugin-typescript2'
import resolve from '@rollup/plugin-node-resolve'
import commonjs from '@rollup/plugin-commonjs'
import json from '@rollup/plugin-json'
import terser from '@rollup/plugin-terser'

let config
// 根据指定的目标获取对应的配置项
if (!process.env.DEST) console.log('未指定目标, 代码将被编译但不会上传')
else if (!(config = require('./.secret.json')[process.env.DEST])) {
    throw new Error('无效目标，请检查 secret.json 中是否包含对应配置')
}

// 是否混淆
const isTerser = !!process.env.TERSER
if (isTerser) {
    console.log('启用混淆')
}

// 根据指定的配置决定是上传还是复制到文件夹
const pluginDeploy =
    config && config.copyPath
        ? // 复制到指定路径
          copy({
              targets: [
                  {
                      src: 'dist/main.js',
                      dest: config.copyPath,
                  },
                  {
                      src: 'src/modules/layout/6g3y/algo_wasm_priorityqueue.wasm',
                      dest: config.copyPath,
                  },
                  {
                      src: 'src/modules/layout/6g3y/autoPlanner63.js',
                      dest: config.copyPath,
                  },
                  {
                      src: 'dist/main.js.map',
                      dest: config.copyPath,
                      rename: (name) => name + '.map.js',
                      transform: (contents) => `module.exports = ${contents.toString()};`,
                  },
              ],
              hook: 'writeBundle',
              verbose: true,
          })
        : // 更新 .map 到 .map.js 并上传
          screeps({
              config,
              dryRun: !config,
          })

export default {
    // 源代码的入口是哪个文件
    input: 'src/main.ts',
    // 构建产物配置
    output: {
        // 输出到哪个文件
        file: 'dist/main.js',
        format: 'cjs',
        sourcemap: true,
    },
    plugins: [
        // 清除上次编译成果
        clear({ targets: ['dist'] }),
        // 打包依赖
        resolve(),
        // 解析json文件
        json(),
        // 模块化依赖
        commonjs(),
        // 编译 ts
        typescript({ tsconfig: './tsconfig.json' }),
        // 复制 wasm 等文件
        copy({
            targets: [
                {
                    src: 'src/modules/layout/6g3y/algo_wasm_priorityqueue.wasm',
                    dest: 'dist',
                },
                {
                    src: 'src/modules/layout/6g3y/autoPlanner63.js',
                    dest: 'dist',
                },
            ],
        }),
        // 压缩代码，会导致异常的调用栈无法定位，在确保代码无误之前勿用！
        isTerser ? terser() : undefined,
        // 执行上传或者复制
        pluginDeploy,
    ],
    external: ['src/modules/layout/6g3y/algo_wasm_priorityqueue.wasm'],
}
